AWS ParallelCluster slurmctld.service 起動時 “Remove /var/spool/slurm.state/clustername” のエラーでサービスを起動できないときの原因と対応方法
Slurm の実行履歴保存用のデータベースに2台目以降の ParallelCluster(Head Node)を接続するとき、名称の重複を避けるためクラスター名(ClusterName
)を変更してからDBに登録したいです。今回は ClusterName
を変更したとき遭遇したエラーメッセージと、対応内容を紹介します。
ParallelCluster とデータベースの連携方法は以下のリンクをご参照ください。
原因と対応方法まとめ
エラーメッセージ
変更後の新しい ClusterName(parallelcluster2)
を反映させるため、slurmctld
サービスを再起動すると失敗し、Remove /var/spool/slurm.state/clustername to override this safety check
のメッセージが出力されます。
$ sudo systemctl status slurmctld ● slurmctld.service - Slurm controller daemon Loaded: loaded (/etc/systemd/system/slurmctld.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Fri 2022-07-15 01:06:19 UTC; 13min ago Process: 3693 ExecStart=/opt/slurm/sbin/slurmctld -D $SLURMCTLD_OPTIONS (code=exited, status=1/FAILURE) Main PID: 3693 (code=exited, status=1/FAILURE) Jul 15 01:06:19 ip-10-0-1-216 systemd[1]: Started Slurm controller daemon. Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: slurmctld: fatal: CLUSTER NAME MISMATCH. Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: slurmctld has been started with "ClusterName=parallelcluster2", but read> Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: Running multiple clusters from a shared StateSaveLocation WILL CAUSE COR> Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: Remove /var/spool/slurm.state/clustername to override this safety check > Jul 15 01:06:19 ip-10-0-1-216 systemd[1]: slurmctld.service: Main process exited, code=exited, status=1/FAILURE Jul 15 01:06:19 ip-10-0-1-216 systemd[1]: slurmctld.service: Failed with result 'exit-code'.
対応方法
変更前の ClusterName(parallelcluster)
が書き込まれた一時ファイル(/var/spool/slurm.state/clustername
)を削除し、slurmctld
サービスを再起動すると解消します。
sudo rm /var/spool/slurm.state/clustername sudo systemctl restart slurmctld sudo systemctl status slurmctld
原因
変更前の ClusterName(parallelcluster)
が書き込まれた一時ファイルが存在しているためでした。
$ sudo cat /var/spool/slurm.state/clustername parallelcluster
切り分けの過程
DB に登録するクラスター名を変更したいため、/opt/slurm/etc/slurm.conf
のClusterNameを編集してparallelcluster2
という名前にしました。
# CLUSTER SETTINGS ClusterName=parallelcluster2 SlurmUser=slurm SlurmctldPort=6820-6829
sacctmgr
コマンドでクラスター名(parallelcluster2
)を DB に登録します。
$ sudo /opt/slurm/bin/sacctmgr add cluster parallelcluster2
設定を反映するために slurmctld
サービスを再起動しました。
$ sudo systemctl restart slurmctld
一瞬起動してすぐにサービスが落ちます。1分ほどおいてから確認してサービスが起動していれば問題ありません。その場合は別の原因が考えられるため本記事では回答は得られません。以降は一例としてなにか参考になる部分もあるかもしれません。
$ sudo systemctl status slurmctld ● slurmctld.service - Slurm controller daemon Loaded: loaded (/etc/systemd/system/slurmctld.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Fri 2022-07-15 01:06:19 UTC; 13min ago Process: 3693 ExecStart=/opt/slurm/sbin/slurmctld -D $SLURMCTLD_OPTIONS (code=exited, status=1/FAILURE) Main PID: 3693 (code=exited, status=1/FAILURE) Jul 15 01:06:19 ip-10-0-1-216 systemd[1]: Started Slurm controller daemon. Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: slurmctld: fatal: CLUSTER NAME MISMATCH. Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: slurmctld has been started with "ClusterName=parallelcluster2", but read> Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: Running multiple clusters from a shared StateSaveLocation WILL CAUSE COR> Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: Remove /var/spool/slurm.state/clustername to override this safety check > Jul 15 01:06:19 ip-10-0-1-216 systemd[1]: slurmctld.service: Main process exited, code=exited, status=1/FAILURE Jul 15 01:06:19 ip-10-0-1-216 systemd[1]: slurmctld.service: Failed with result 'exit-code'.
systemctl
サービスが停止しているとよく使うコマンドが使えない(タイムアウトします)ため気付くかと思います。
$ sbatch -q debug test.sh sbatch: error: Batch job submission failed: Unable to contact slurm controller (connect failure) $ sinfo slurm_load_partitions: Unable to contact slurm controller (connect failure)
原因
/var/spoo/
配下の一時ファイルが怪しいです。
Jul 15 01:06:19 ip-10-0-1-216 slurmctld[3693]: Remove /var/spool/slurm.state/clustername to override this safety check >
/var/spool/slurm.state/clustername
ファイルに変更前のクラスター名(parallelcluster
)が書き込まれていました。
$ sudo cat /var/spool/slurm.state/clustername parallelcluster
対応
該当ファイルを削除します。
$ sudo rm /var/spool/slurm.state/clustername
slurmctld
サービスを再起動すると今度はすぐに落ちません。
$ sudo systemctl restart slurmctld $ sudo systemctl status slurmctld ● slurmctld.service - Slurm controller daemon Loaded: loaded (/etc/systemd/system/slurmctld.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2022-07-15 01:25:23 UTC; 10s ago Main PID: 4015 (slurmctld) Tasks: 18 (limit: 1116) Memory: 3.5M CGroup: /system.slice/slurmctld.service ├─4015 /opt/slurm/sbin/slurmctld -D └─4016 slurmctld: slurmscriptd Jul 15 01:25:23 ip-10-0-1-216 systemd[1]: Started Slurm controller daemon. Jul 15 01:25:24 ip-10-0-1-216 slurmctld[4015]: slurmctld: No memory enforcing mechanism configured. Jul 15 01:25:24 ip-10-0-1-216 slurmctld[4015]: slurmctld: No parameter for mcs plugin, default values set Jul 15 01:25:24 ip-10-0-1-216 slurmctld[4015]: slurmctld: mcs: MCSParameters = (null). ondemand set.
削除したファイルと同じ名前の一時ファイルが生成されているため中身を確認します。新しく設定した ClusterName(parallelcluster2)
が書き込まれていました。
$ sudo cat /var/spool/slurm.state/clustername parallelcluster2
slurmctld
サービスが起動しているため、よく使うコマンドも実行できます。
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST debug* up infinite 10 idle~ debug-dy-debug-[1-10] c6ilarge up infinite 10 idle~ c6ilarge-dy-c6ilarge-[1-10] c6i32xlarge up infinite 10 idle~ c6i32xlarge-dy-c6i32xlarge-[1-10] large2 up infinite 10 idle~ large2-dy-c6i32xlarge-[1-10]
以上、切り分けの過程でした。
おわりに
既存の Slurm DB がある状態でクラスター名を変更した ParallelCluster を追加していく手順を別途用意しておくとみんな幸せになれるのではないかと思いました。期待せずにお待ちいただけると幸いです。